import java.util.GregorianCalendar;

/**
 * @author : zzr
 * @description :
 * @date :
 */

class Food {

}
class Fruit extends Food {

}
class Apple extends Fruit {

}
class Banana extends Fruit {

}
class Message<T> { //设置泛型
    private T message;

    public T getMessage() {
        return message;
    }

    public void setMessage(T message) {
        this.message = message;
    }
}
public class Test {
    public static void main(String[] args) {
        Message<Apple> message = new Message<>();
        message.setMessage(new Apple());
//        fun(message); //err 因为Apple是Fruit的子类 但是由于有 ? super Fruit
                        //fun方法只能接收Fruit及其Fruit的父类

        Message<Food> message1 = new Message<>();
        message1.setMessage(new Food());
        fun(message1);
    }

    private static void fun(Message<? super Fruit> message) {

       //在通配符上界中 是可以进行修改的 添加的Fruit本身 或者是Fruit的子类

        message.setMessage(new Apple());  //这个是Fruit的子类
        message.setMessage(new Fruit());  //这个是Fruit本身
        System.out.println(message.getMessage());
    }
}
